package br.edu.utfpr.backupTools.view.action.strategy.impl;

import java.util.ArrayList;
import java.util.List;

import br.edu.utfpr.backupTools.controller.ControladorBackupImpl;
import br.edu.utfpr.backupTools.controller.interfaces.ControladorBackup;
import br.edu.utfpr.backupTools.controller.validator.BackupValidator;
import br.edu.utfpr.backupTools.model.dao.DaoBackupImpl;
import br.edu.utfpr.backupTools.model.dao.interfaces.DaoBackup;
import br.edu.utfpr.backupTools.model.pojo.Backup;
import br.edu.utfpr.backupTools.rmi.ClienteRmi;
import br.edu.utfpr.backupTools.util.enums.TipoConexao;
import br.edu.utfpr.backupTools.view.action.strategy.AbstractBackup;
import br.edu.utfpr.backupTools.view.action.strategy.iterfaces.GerarBackup;
import br.edu.utfpr.comum.BackupDTO;
import br.edu.utfpr.comum.RetornoValidacao;
import br.edu.utfpr.comum.Stream;

public class GerarBackupRemoto extends AbstractBackup implements GerarBackup{

	@Override
	public RetornoValidacao gerarBackup(Backup bean) {
		try {
			BackupDTO dto = new BackupDTO(bean.getId(), bean.getDescricao(), bean.getOrigem(), bean.getDestino());
			Stream stream = controlador.gerarBackupRemoto(bean);
			
			if(stream != null){
				return ClienteRmi.getInstance().provider().gerarBackup(stream,dto);
			}
			
			return new RetornoValidacao("Ocorreu um erro enviar o arquivo para o servidor");
		} catch (Exception e) {
			e.printStackTrace();
			return new RetornoValidacao("Ocorreu um erro enviar o arquivo para o servidor");
		}
	}

	@Override
	public RetornoValidacao gerarTodosBackups() {
		try {

			for (Backup b : controlador.list()) {
				if(b.getTipoConexao().equals(TipoConexao.REMOTA))
				{
                    Stream stream = controlador.gerarBackupRemoto(b);
                    BackupDTO dto = new BackupDTO(b.getId(), b.getDescricao(), b.getOrigem(), b.getDestino());
                    ClienteRmi.getInstance().provider().gerarBackup(stream,dto);
				}
			}

			return new RetornoValidacao();
		} catch (Exception e) {
			return new RetornoValidacao("Ocorreu um erro ao conectar com o servidor");
		}
	}

}
